home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / latex209 / contrib / trees / pstrees / columns.c < prev    next >
C/C++ Source or Header  |  1994-01-28  |  2KB  |  133 lines

  1. # include "align.h"
  2. # include <stdio.h>
  3.  
  4. /* externals */
  5.  /* from slurp.c */
  6. extern void fetchline();
  7. extern char nextchar();
  8. extern char peekchar();
  9. extern int eoln();
  10. extern FILE *outstream;
  11.  
  12.  /* from words.c */
  13. extern void readword_col();
  14. extern void init_store();
  15.  
  16. /* externals from errors.c */
  17. extern goof(); /* error-writing routine
  18.   void goof(char *s); */
  19. extern int sinned, error; /* error-flags */
  20.  
  21.  
  22. /* local word-ending function */
  23. static int endword(c)
  24. char c;
  25. {
  26.  char d;
  27.  if (eoln() || ((c == ' ' && ((d = squizchar()) == ' ' || d == '\n')))
  28.    || c == '|')
  29.    return(TRUE);
  30.  else
  31.   return(FALSE);
  32. }
  33.  
  34. /* skips over `|''s and blanks, getting width */
  35. static int chewspace()
  36. {
  37.   int count;
  38.   char c;
  39.  
  40.   count = 0;
  41.   if (!eoln()) {
  42.     while ((c = squizchar()) == ' ' || c == '|') {
  43.       count++;
  44.       nextchar();
  45.     }
  46.   }
  47.   return(count);
  48. }
  49.  
  50.  
  51. do_word()
  52. {
  53.   word holder;
  54.   int space;
  55.   int stop;
  56.  
  57.   if (!eoln()) {
  58.     init_store();
  59.     readword_col(&holder,&stop,endword,nextchar);
  60. /* printf("word = %s;  eol = %d\n",holder.loc,eoln()); */
  61.     space = chewspace();
  62. /*    printf("chewed space %d:: eol = %d\n",space,eoln());  */
  63.     if (!error) {
  64.       if (eoln()) {
  65.         fprintf(outstream,"%s",holder.loc);
  66.       }
  67.       else {
  68.     space = space+holder.size+1;
  69.         fprintf(outstream,"\\cbx{%d}{%s}",space,holder.loc);
  70.       }
  71.     }
  72.   }
  73. }
  74.  
  75. do_line()
  76. {
  77.   int initspace;
  78.  
  79.   initspace = chewspace();
  80.   if (!eoln() && initspace > 0)
  81.      fprintf(outstream,"\\cbx{%d}{}",initspace);
  82.   while (!eoln())
  83.     do_word();
  84.   fprintf(outstream, "\\\\\n");
  85. }
  86.  
  87.  
  88. /* top-level routine,  that reads in lines until it encounters
  89.   end-of-example or eof */
  90.  
  91. void columns()
  92. {
  93.   int go;
  94.  
  95.   error = FALSE;
  96.   go = TRUE;
  97.   while (go) {
  98.     fetchline();
  99.  
  100.     if (matchstr(".>"))
  101.       go = FALSE;
  102.     if (eof()) {
  103.       goof("file ends in example");
  104.       go = FALSE;
  105.     }
  106.     if (go) do_line();
  107.   }
  108. }
  109.  
  110. /*
  111. char delmark = '\\';
  112. int  wordmax = 60;
  113.  
  114. main()
  115. {
  116. word sample;
  117. int stop;
  118. int s;
  119.  
  120. get_com_widths("widths.dat");
  121. open_source("text.dat");
  122. init_store();
  123.  
  124. advance();
  125. readword_col(&sample,&stop,endword,nextchar);
  126. printf("%s, size = %d, bracket= %d\n",sample.loc,sample.size,sample.bracket);
  127. if (stop) printf("stop!\n");
  128. }
  129. */
  130.  
  131.  
  132.  
  133.